package com.yy.finvideoplayer

import android.graphics.Bitmap
import com.yy.finvideoplayer.floatwindow.FloatParams
import com.yy.finvideoplayer.media.BaseMedia

/**
 * @Description: IVideoPlayer
 * @Author: yiw89
 * @CreateDate: 2025/9/1 15:10
 * @Version: 1.0
 */
interface IVideoPlayer {
    /**
     * 设置视频参数
     *
     * @param url     视频地址
     * @param headers 头参数
     * @param option  ijk配置...
     */
    fun setUp(url: String, headers: Map<String, String>?, option: Any?)

    fun play() //初始化(完成自动播放)/播放

    fun prePlay() //初始化(完成不会播放)

    fun pause() //暂停

    fun seekTo(duration: Int) //进度调节

    fun setPlayListener(playListener: PlayListener) //播放监听 参数含义参照本类

    fun addPlayListener(playListener: PlayListener) //多播放监听

    fun removePlayListener(playListener: PlayListener) //移除播放监听

    fun setAspectRatio(aspectRatio: Int) //设置视频比例 参数见IRenderView

    fun setDecodeMedia(claxx: Class<out BaseMedia>) //设置解码模块

    fun openCache() //打开缓存

    fun onBackPressed(): Boolean //返回键退出全屏

    fun isPlaying(): Boolean //是否播放中

    fun enterWindowFullscreen() //全屏

    fun quitWindowFullscreen() //退出全屏

    fun enterWindowFloat(floatParams: FloatParams): Boolean //浮窗 false没权限

    fun quitWindowFloat() //退出浮窗

    fun setMute(isMute: Boolean): Boolean //是否静音 false不支持

    fun setSpeed(rate: Float): Boolean //设置播放倍速,false不支持

    fun setObjectFit(fitMode: String) //设置视频填充模式，contain/cover/fill

    fun release() //销毁

    fun getCurrentFrame(): Bitmap? //截图

    fun getPosition(): Int //获取播放进度

    fun getDuration(): Int //获取视频时长

    fun getVideoWidth(): Int //获取视频宽

    fun getVideoHeight(): Int //获取视频长

    fun getCurrentMode(): Int //获得播放器当前的模式(全屏,普通...)

    fun getCurrentState(): Int //获得播放器当前的状态(播放,暂停,完成...)

    companion object {
        //播放器当前状态
        const val STATE_NORMAL: Int = 0 //未播放
        const val STATE_PREPARING: Int = 1 //初始化中
        const val STATE_PLAYING: Int = 2 //播放中

        //去掉这个状态 缓冲只是显示个进度 不影响其他状态
        //int STATE_PLAYING_BUFFERING_START = 3;//缓冲
        const val STATE_PAUSE: Int = 4 //暂停中
        const val STATE_AUTO_COMPLETE: Int = 5 //播放完成
        const val STATE_ERROR: Int = 6 //播放出错

        //播放器容器模式
        const val MODE_WINDOW_NORMAL: Int = 100 //普通模式
        const val MODE_WINDOW_FULLSCREEN: Int = 101 //全屏模式
        const val MODE_WINDOW_FLOAT_SYS: Int = 102 //系统悬浮窗口模式 需要权限
        const val MODE_WINDOW_FLOAT_ACT: Int = 103 //界面内悬浮窗口模式

        //播放事件
        const val EVENT_PREPARE_START: Int = 10 //初始化开始
        const val EVENT_PREPARE_END: Int = 11 //初始化完成
        const val EVENT_PLAY: Int = 12 //播放事件
        const val EVENT_PAUSE: Int = 13 //暂停事件
        const val EVENT_BUFFERING_START: Int = 14 //缓冲
        const val EVENT_BUFFERING_END: Int = 15 //缓冲结束
        const val EVENT_ERROR: Int = 16 //出错
        const val EVENT_VIDEOSIZECHANGE: Int = 17 //视频长宽大小
        const val EVENT_COMPLETION: Int = 18 //播放完成
        const val EVENT_BUFFERING_UPDATE: Int = 19 //缓冲进度
        const val EVENT_SEEK_COMPLETION: Int = 20 //调节进度完成
        const val EVENT_SEEK_TO: Int = 21 //调节进度

        const val EVENT_RELEASE: Int = 88 //销毁事件
    }
}